import axios from 'axios';
import showDialog from '../components/Dialog/index';

axios.defaults.withCredentials = true;

// request 拦截器
axios.interceptors.request.use(
  (config) => {
    // 设置request的参数 jwt login/register接口不用拼接 其余接口如果没有token则跳转至登录界面
    config.headers.Authorization = window.sessionStorage.token || '';

    return config;
  },
  (error) => (
    // fail
    Promise.reject(error)
  )

);

// response
axios.interceptors.response.use((response) => {
  // 返回response
  if (
    response
    && response.status === 200
    && response.data.code !== '0000'
  ) {
    showDialog({
      type: 'error',
      content: response.data.message || '未知错误'
    });
    throw new Error(response.data.code.message || '未知错误');
  }
  return response;
}, (err) => {
  showDialog({
    type: 'error',
    content: err.message || '未知错误'
  });
  if (err && err.response) {
    switch (err.response.status) {
      /**
       * @状态码默认含义
       * 100 - 继续请求
       * 101 - 服务端响应客户端请求正在升级/切换协议
       * 200 - ok
       * 201 - 新的资源已经被创建
       * 202 - 服务端已收到消息 但未处理
       * 204 - 请求成功 客户端不需要更新任何页面
       * 301 - 永久重定向
       * 302 - 临时重定向
       * 303 - 重定向资源过期
       * 304 - 缓存内容和服务端内容一致 不需要重复请求
       * 400 - 非法请求
       * 401 - 缺少身份验证信息
       * 403 - 错误的授权/登录信息
       * 404 - 资源丢失 或者错误路径
       * 405 - 不支持的HTTP请求方法
       * 406 - 语言 格式等不支持
       * 500 - 服务器错误
       * 501 - 不被支持的请求方法或者文件类型
       * 502 - 作为代理的服务器获取到的信息无效
       * 503 - 服务器停机
       * 504 - 超时
       * 
       */ 
      case 301:
        console.log('重定向');
        break;
      case 302:
        console.log('鉴权失败');
        // showDialog('error', '鉴权失败', () => {});
        break;
      case 400:
        console.log('400 错误请求');
        // showDialog('error', '400 错误请求', () => {});
        break;
      case 401:
        // 任意接口返回401即跳转至登录界面
        console.log('401 未授权');
        window.location.href = '/login';
        break;
      case 403:
        console.log('403 拒绝访问');
        // window.location.href = '/login';
        break;
      case 404:
        // showDialog('error', '404 未知路径', () => {});
        break;
      case 405:
        console.log('405 请求方法不被允许');
        // window.location.href = '/login';
        break;
      case 408:
        console.log('408 超时');
        // showDialog('info', 'xxxxxxxxxxxx', () => {});
        break;
      case 500:
        console.log('500 服务端错误');
        // showDialog('error', '500 服务端错误', () => {});
        break;
      case 502:
        console.log('502 网络不可用');
        // showDialog('error', '502 网络不可用', () => {});
        break;
      case 503:
        console.log('503 服务不可用');
        // showDialog('error', '503 服务不可用', () => {});
        break;
      case 505:
        console.log('505 http版本不支持该请求');
        // showDialog('error', '505 http版本不支持该请求', () => {});
        break; 
      default:
        console.log(`${err.response.status} ${err.response.data.message || 'unKnow Error'}`);
        // showDialog('error', `${err.response.status} ${err.response.data.message || 'unKnow Error'}`, () => {});
    }
  } else {
    // showDialog('error', '未知错误', () => {});
  }

  return err;
});

export default axios;
